import axios from 'axios'
import { Message } from 'element-ui'
import store from '@/store'
import router from '@/router'

const request = axios.create({
  baseURL: process.env.VUE_APP_BASE_URL
  // baseURL: process.env.VUE_APP_URL
})

request.defaults.withCredentials = true

request.interceptors.request.use(
 
    //在此处 处理 headers 中 对 token 属性的 需要与否
  config => {
    // 有一部分接口不用加token，所以自定义一个属性，用来区分不需要在请求头添加token接口
    // if (!confirm.noToken) {
    // confirm.headers.token = '639036fcd4dab'
    // }

    //需要token则在header中设置token
    if (!config.noToken) {
      config.headers.token = store.state.user.token
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

request.interceptors.response.use(
  //成功从服务器获取返回数据 => 与服务器的链接正常
  res => {
    if (res.data) {
      //数据在后台验证不通过 => 前端传入的数据对象 需要调整
      if (res.data.code > 200) {
        // console.log(res.data.code)
        // token超时处理
        if (res.data.code === 206) {
          console.log(res.data.code)
          // store.state.user.token = ''
          // store.state.user.userInfo = ''
          store.dispatch('user/SET_LOGOUT')
          Message.error('登录超时')
          router.push('/')
        } else {
          Message.error(res.data.message)
        }
        return Promise.reject(new Error(res.data.message))
      }
      //数据后台验证通过
      else {
        return res.data
      }

      // 未能正常获取res.data的数据 => 后台返回的数据对象 的 结构 可能需要特别处理
    } else {
      Message.error(res.data.message)
      return Promise.reject(new Error(res.data.message))
    }
  },
  //未能从服务器获取返回数据 => 与服务器的链接失败
  error => {
    return Promise.reject(error)
  }
)

export default request
